租户角色和权限

问题描述

如何添加基于多租户角色的系统。 目前我的基于角色的系统适用于单个系统。

我有租户表和用户表,我为每个用户提供了他们的租户 ID。

我的系统有管理员、企业主(供应商/合作伙伴)、企业经理、企业员工和客户(最终用户)。

--
-- Table structure for table `permissions`
--

CREATE TABLE `permissions` (
  `id` int(10) UNSIGNED NOT NULL,`module_id` int(10) UNSIGNED NOT NULL,`name` varchar(191) COLLATE utf8_unicode_ci NOT NULL,`display_name` varchar(191) COLLATE utf8_unicode_ci DEFAULT NULL,`description` varchar(191) COLLATE utf8_unicode_ci DEFAULT NULL,`created_at` timestamp NULL DEFAULT NULL,`updated_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

-- --------------------------------------------------------

--
-- Table structure for table `permission_role`
--

CREATE TABLE `permission_role` (
  `permission_id` int(10) UNSIGNED NOT NULL,`role_id` int(10) UNSIGNED NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

-- --------------------------------------------------------

--
-- Table structure for table `permission_user`
--

CREATE TABLE `permission_user` (
  `permission_id` int(10) UNSIGNED NOT NULL,`user_id` int(10) UNSIGNED NOT NULL,`user_type` varchar(191) COLLATE utf8_unicode_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

-- --------------------------------------------------------

--
-- Table structure for table `roles`
--

CREATE TABLE `roles` (
  `id` int(10) UNSIGNED NOT NULL,`updated_at` timestamp NULL DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

-- --------------------------------------------------------

--
-- Table structure for table `role_user`
--

CREATE TABLE `role_user` (
  `role_id` int(10) UNSIGNED NOT NULL,`user_type` varchar(191) COLLATE utf8_unicode_ci NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

我使用 laratrust 权限和角色。

我的用户观察器如下所示:

namespace App\Observers;

use App\Helper\SearchLog;
use App\Models\User;
use Illuminate\Support\Facades\File;
use Illuminate\Support\Facades\Storage;

class UserObserver
{
    public function roleAttached(User $user,$role,$team)
    {
        if (!$user->is_admin) {
            if ($user->is_owner) {
                $type = 'Owner';
                $route = 'admin.owner.edit';
            }

            if ($user->is_manager) {
                $type = 'Manager';
                $route = 'admin.manager.edit';
            }

            if ($user->is_employee) {
                $type = 'Employee';
                $route = 'admin.employee.edit';
            }

            if ($user->is_customer) {
                $type = 'Customer';
                $route = 'admin.customers.show';
            }

            SearchLog::createSearchEntry($user->id,$type,$user->first_name . " " . $user->last_name,$route);
            SearchLog::createSearchEntry($user->id,$user->email,$route);
        }
    }

    public function updating(User $user)
    {
        if (!$user->is_admin) {
            if ($user->is_owner) {
                $type = 'Owner';
                $route = 'admin.owner.edit';
            }

            if ($user->is_manager) {
                $type = 'Manager';
                $route = 'admin.manager.edit';
            }

            if ($user->is_employee) {
                $type = 'Employee';
                $route = 'admin.employee.edit';
            }

            if ($user->is_customer) {
                $type = 'Customer';
                $route = 'admin.customers.show';
            }

            if ($user->isDirty('first_name')) {
                $original = $user->getoriginal('first_name');
                SearchLog::updateSearchEntry($user->id,$route,['first_name' => $original]);
            }

            if ($user->isDirty('email')) {
                $original = $user->getoriginal('email');
                SearchLog::updateSearchEntry($user->id,['email' => $original]);
            }

            if ($user->isDirty('image')) {
                if(!is_null($user->getoriginal('image'))){
                    $path = public_path('user-uploads/avatar/'.$user->getoriginal('image'));
                    if($path){
                        File::delete($path);
                    }
                }
            }
        }
    }

    public function deleted(User $user)
    {
        if(!is_null($user->getoriginal('image')))
        {
            $path = public_path('user-uploads/avatar/'.$user->getoriginal('image'));
            if($path){
                File::delete($path);
            }
        }

        if (!$user->is_admin) {
            if ($user->is_owner) {
                $route = 'admin.owner.edit';
            }

            if ($user->is_manager) {
                $route = 'admin.manager.edit';
            }

            if ($user->is_employee) {
                $route = 'admin.employee.edit';
            }

            if ($user->is_customer) {
                $route = 'admin.customers.show';
            }

            SearchLog::deleteSearchEntry($user->id,$route);
        }
    }
}

场景:

合作伙伴在我们的平台账户中注册(它会自动为他的企业和他的用户创建租户 ID),他的企业有不同的角色和权限 + 他可以为他的企业添加新角色。那么我是否必须为租户角色创建新表?那个表应该包含什么?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)