问题描述
如何添加基于多租户角色的系统。 目前我的基于角色的系统适用于单个系统。
我的系统有管理员、企业主(供应商/合作伙伴)、企业经理、企业员工和客户(最终用户)。
--
-- 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 (将#修改为@)