diff --git a/src/Database/Seeds/CreateUserAdmin.php b/src/Database/Seeds/CreateUserAdmin.php new file mode 100644 index 0000000..fc852b5 --- /dev/null +++ b/src/Database/Seeds/CreateUserAdmin.php @@ -0,0 +1,134 @@ +getRoles(); + $this->saveRoles($roles); + + + $permissions = $this->getPermissions(); + $this->syncPermissionsRole($roles, $permissions); + } + + /** + * @return array Roles to seed + */ + protected function getRoles() + { + return [ + 'user-admin' => new Role([ + 'slug' => 'user-admin', + 'name' => 'User Administrator', + 'description' => 'This role is meant for "user administrators", who can basically do anything related to users.', + ]), + ]; + } + + /** + * Save roles. + * + * @param array $roles + */ + protected function saveRoles(array &$roles) + { + foreach ($roles as $slug => $role) { + // Trying to find if the role already exist + $existingRole = Role::where(['slug' => $role->slug])->first(); + + // Don't save if already exist, use existing role reference + // otherwise to re-sync permissions and roles + if ($existingRole == null) { + $role->save(); + } else { + $roles[$slug] = $existingRole; + } + } + } + + /** + * @return array Permissions to seed + */ + protected function getPermissions() + { + $defaultRoleIds = [ + 'user' => Role::where('slug', 'user')->first()->id, + 'group-admin' => Role::where('slug', 'group-admin')->first()->id, + 'site-admin' => Role::where('slug', 'site-admin')->first()->id, + ]; + + return [ + 'uri_dashboard' => Permission::where([ + ['slug', 'uri_dashboard'], + ['conditions', 'always()'] + ])->first(), + + 'uri_user' => Permission::where([ + ['slug', 'uri_user'], + ['conditions', 'always()'] + ])->first(), + 'uri_users' => Permission::where([ + ['slug', 'uri_users'], + ['conditions', 'always()'] + ])->first(), + + 'create_user' => Permission::where([ + ['slug', 'create_user'] + ])->first(), + 'view_user_field' => Permission::where([ + ['slug', 'view_user_field'] + ])->first(), + 'update_user_field' => Permission::where([ + ['slug', 'update_user_field'] + ])->first(), + 'delete_user' => Permission::where([ + ['slug', 'delete_user'] + ])->first(), + ]; + } + + + /** + * Sync permissions with default roles. + * + * @param array $permissions + */ + protected function syncPermissionsRole(array $roles, array $permissions) + { + $roles['user-admin']->permissions()->syncWithoutDetaching([ + $permissions['uri_dashboard']->id, + + $permissions['uri_user']->id, + $permissions['uri_users']->id, + + $permissions['create_user']->id, + $permissions['view_user_field']->id, + $permissions['update_user_field']->id, + $permissions['delete_user']->id, + ]); + } +} \ No newline at end of file