]> BookStack Code Mirror - bookstack/blob - database/migrations/2016_02_27_120329_update_permissions_and_roles.php
dd62301d6f33ccbabbb9333224fa0e6f542daf8e
[bookstack] / database / migrations / 2016_02_27_120329_update_permissions_and_roles.php
1 <?php
2
3 use Illuminate\Database\Migrations\Migration;
4
5 return new class extends Migration
6 {
7     /**
8      * Run the migrations.
9      *
10      * @return void
11      */
12     public function up()
13     {
14         // Get roles with permissions we need to change
15         $adminRoleId = DB::table('roles')->where('name', '=', 'admin')->first()->id;
16         $editorRole = DB::table('roles')->where('name', '=', 'editor')->first();
17
18         // Delete old permissions
19         $permissions = DB::table('permissions')->delete();
20
21         // Create & attach new admin permissions
22         $permissionsToCreate = [
23             'settings-manage'         => 'Manage Settings',
24             'users-manage'            => 'Manage Users',
25             'user-roles-manage'       => 'Manage Roles & Permissions',
26             'restrictions-manage-all' => 'Manage All Entity Permissions',
27             'restrictions-manage-own' => 'Manage Entity Permissions On Own Content',
28         ];
29         foreach ($permissionsToCreate as $name => $displayName) {
30             $permissionId = DB::table('permissions')->insertGetId([
31                 'name'         => $name,
32                 'display_name' => $displayName,
33                 'created_at'   => \Carbon\Carbon::now()->toDateTimeString(),
34                 'updated_at'   => \Carbon\Carbon::now()->toDateTimeString(),
35             ]);
36             DB::table('permission_role')->insert([
37                 'role_id'       => $adminRoleId,
38                 'permission_id' => $permissionId,
39             ]);
40         }
41
42         // Create & attach new entity permissions
43         $entities = ['Book', 'Page', 'Chapter', 'Image'];
44         $ops = ['Create All', 'Create Own', 'Update All', 'Update Own', 'Delete All', 'Delete Own'];
45         foreach ($entities as $entity) {
46             foreach ($ops as $op) {
47                 $permissionId = DB::table('permissions')->insertGetId([
48                     'name'         => strtolower($entity) . '-' . strtolower(str_replace(' ', '-', $op)),
49                     'display_name' => $op . ' ' . $entity . 's',
50                     'created_at'   => \Carbon\Carbon::now()->toDateTimeString(),
51                     'updated_at'   => \Carbon\Carbon::now()->toDateTimeString(),
52                 ]);
53                 DB::table('permission_role')->insert([
54                     'role_id'       => $adminRoleId,
55                     'permission_id' => $permissionId,
56                 ]);
57                 if ($editorRole !== null) {
58                     DB::table('permission_role')->insert([
59                         'role_id'       => $editorRole->id,
60                         'permission_id' => $permissionId,
61                     ]);
62                 }
63             }
64         }
65     }
66
67     /**
68      * Reverse the migrations.
69      *
70      * @return void
71      */
72     public function down()
73     {
74         // Get roles with permissions we need to change
75         $adminRoleId = DB::table('roles')->where('name', '=', 'admin')->first()->id;
76
77         // Delete old permissions
78         $permissions = DB::table('permissions')->delete();
79
80         // Create default CRUD permissions and allocate to admins and editors
81         $entities = ['Book', 'Page', 'Chapter', 'Image'];
82         $ops = ['Create', 'Update', 'Delete'];
83         foreach ($entities as $entity) {
84             foreach ($ops as $op) {
85                 $permissionId = DB::table('permissions')->insertGetId([
86                     'name'         => strtolower($entity) . '-' . strtolower($op),
87                     'display_name' => $op . ' ' . $entity . 's',
88                     'created_at'   => \Carbon\Carbon::now()->toDateTimeString(),
89                     'updated_at'   => \Carbon\Carbon::now()->toDateTimeString(),
90                 ]);
91                 DB::table('permission_role')->insert([
92                     'role_id'       => $adminRoleId,
93                     'permission_id' => $permissionId,
94                 ]);
95             }
96         }
97
98         // Create admin permissions
99         $entities = ['Settings', 'User'];
100         $ops = ['Create', 'Update', 'Delete'];
101         foreach ($entities as $entity) {
102             foreach ($ops as $op) {
103                 $permissionId = DB::table('permissions')->insertGetId([
104                     'name'         => strtolower($entity) . '-' . strtolower($op),
105                     'display_name' => $op . ' ' . $entity,
106                     'created_at'   => \Carbon\Carbon::now()->toDateTimeString(),
107                     'updated_at'   => \Carbon\Carbon::now()->toDateTimeString(),
108                 ]);
109                 DB::table('permission_role')->insert([
110                     'role_id'       => $adminRoleId,
111                     'permission_id' => $permissionId,
112                 ]);
113             }
114         }
115     }
116 };