租户角色和权限

时间:2021-02-07 22:12:27

标签: php laravel laratrust

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

我有租户表和用户表,我为每个用户提供了他们的租户 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,
  `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 `role_user`
--

CREATE TABLE `role_user` (
  `role_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;

我使用 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, $type, $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, $type, $user->first_name . " " . $user->last_name, $route, ['first_name' => $original]);
            }

            if ($user->isDirty('email')) {
                $original = $user->getOriginal('email');
                SearchLog::updateSearchEntry($user->id, $type, $user->email, $route, ['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),他的企业有不同的角色和权限 + 他可以为他的企业添加新角色。那么我是否必须为租户角色创建新表?那个表应该包含什么?

0 个答案:

没有答案