Esempio n. 1
0
 public function fire()
 {
     $updateRolesOpt = $this->option('update-roles');
     $role_permissions = Config::get("acl::config.roles");
     $group_resources = Config::get("acl::config.group_resources");
     $db_group_resources = GroupResources::all();
     $db_role_permissions = RolePermission::all();
     if (!$db_role_permissions->count()) {
         $updateRolesOpt = true;
     }
     $group_resources_map = array();
     foreach ($db_group_resources as $row) {
         $group_resources_map[$row->resource] = $row->permission_id;
     }
     $this->updateResorces($group_resources_map, $group_resources);
     $this->updateRolesResources();
     if ($updateRolesOpt && count($role_permissions)) {
         // if there new roles add them, don't delete not list role
         $roles = Acl::getRoles();
         $rolesMap = array();
         foreach ($roles as $row) {
             $rolesMap[$row->name] = $row->role_id;
         }
         Acl::runUnguardCallback(function () use($role_permissions, $rolesMap) {
             foreach ($role_permissions as $role) {
                 $aclRole = new AclRole($role);
                 $role_name = $role['name'];
                 if (isset($rolesMap[$role_name])) {
                     $role['role_id'] = $rolesMap[$role_name];
                     $aclRole = new AclRole($role);
                     $aclRole->update();
                 } else {
                     $aclRole = new AclRole($role);
                     $aclRole->add();
                 }
             }
         });
         $roles_ids = array_values($rolesMap);
         if (count($roles_ids)) {
             UserRole::whereNotIn('role_id', $roles_ids)->delete();
         }
     }
 }