/** * Returns board uris with this permission. * * @param \App\Contracts\PermissionUser|null $user User roles must belong to. Defaults to null. * @param bool $anonymous Determines if we should allow generic, unassigned roles. Defaults true. * @return Collection of \App\Board->board_uri strings */ public function getBoardsWithPermissions(PermissionUser $user = null, $anonymous = true) { // Identify roles which affect this user. // Sometimes we will only want direct assignments. // This includes null user_id assignments for anonymouse users. $userRoles = UserRole::select('role_id')->where(function ($query) use($user, $anonymous) { if ($anonymous) { $query->whereNull('user_id'); } if ($user instanceof PermissionUser && !$user->isAnonymous()) { $query->orWhere('user_id', $user->user_id); } else { if (!$anonymous) { $query->where(\DB::raw('0'), '1'); } } })->get()->pluck('role_id'); if (!$userRoles) { return collect(); } $inheritRoles = Role::select('role_id', 'inherit_id')->whereIn('role_id', $userRoles)->get()->pluck('inherit_id')->filter(function ($item) { return !is_null($item); }); // Identify roles which use this permission, // or which borrow inherited roles. $validRoles = RolePermission::select('role_id', 'permission_id')->where(function ($query) use($userRoles, $inheritRoles) { $query->orWhereIn('role_id', $userRoles); if ($inheritRoles) { $query->orWhereIn('role_id', $inheritRoles); } })->where('permission_id', $this->permission_id)->get()->pluck('role_id'); if (!$validRoles) { return collect(); } // Find the intersection of roles we have and roles we want. $intersectIdents = collect($userRoles)->intersect(collect($validRoles)); $inheritIdents = collect($inheritRoles)->intersect(collect($validRoles)); $intersectRoles = collect(); if ($intersectIdents) { // These are only roles which are directly assigned to us with // this permission. $intersectRoles = collect(Role::select('role_id', 'board_uri')->whereIn('role_id', $intersectIdents)->get()->pluck('board_uri')); } if ($inheritIdents) { $intersectRoles = collect(Role::select('role_id', 'board_uri')->whereIn('inherit_id', $inheritIdents)->whereIn('role_id', $userRoles)->get()->pluck('board_uri'))->merge($intersectRoles); } return $intersectRoles; }
/** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index() { $roles = UserRole::select(array('id', 'name', 'created_at')); return \Datatables::of($roles)->addColumn('actions', '<a class="btn btn-xs btn-alt" data-toggle="modal" onClick="launchUpdateRoleModal({{$id}});" data-target=".modalEditRole">Edit</a>')->make(true); }