Как управлять Пользовательскими Ролями в Базе данных?

Я создаю веб-сайт, в котором я буду управлять пользователями и их полномочиями. Я надеюсь реализовывать пользовательские роли и, может казаться, не переношу голову, как должны работать вещи. Я хочу смочь присвоить пользователю, определенная роль, и иметь каждую роль содержит ту к нескольким полномочиям, которые могут быть прочитаны легко моим сценарием. Просто хочу знать, как я должен пойти об установке моей базы данных, чтобы сделать это легко и эффективно.

В моей голове я таблицы изображения 3 (пользователи, роли и полномочия). Я мог дать каждому пользователю ролевой идентификатор, который присоединяется к ролевой таблице, я просто не знаю, как я могу связать роли с несколькими полномочиями.

15
задан Jeff LaFay 8 April 2011 в 04:14
поделиться

3 ответа

Я просто не знаю, как я могу связать роли с несколькими разрешениями. с несколькими разрешениями.

Вы используете таблицу join: role_id и permission_id, чтобы определить, какие разрешения связаны с какими ролями

EDIT:

Примеры таблиц

ROLE Table

Role_ID Role_Name
1       Standard User
2       Super User
3       Guest

PERMISSION Table

Permission_ID Permission_Name
1             View User List
2             Update Own User Account
3             Update Any User Account

ROLE_PERMISSION Table

Role_ID Permission_ID
1       1    // Role 1 (Standard User) grants View User List
1       2    //        and Update Own User Account
2       1    // Role 2 (Super User) grants View User List,
2       2    //        Update Own User Account,
2       3    //        and Update Any User Account
3       1    // Role 3 (Guest) grants View User List

Перечисление разрешений для указанного Role_ID

select R.role_id,
       P.permission_id,
       P.permission_name
  from role R,
       permission P,
       role_permission RP
 where RP.permission_id = P.permission_id
   and RP.role_id = R.role_id
   and R.role_id = 1 
42
ответ дан 1 December 2019 в 00:18
поделиться

Обычно я делаю вот так:

Вы определяете набор разрешений, значение которых варьируется от целевого объекта к целевому объекту, но общее значение которых одинаково. Например:

  • чтение
  • запись
  • добавление
  • удаление
  • удаление содержимого
  • разрешение на чтение
  • изменение полномочий

Затем вы назначаете бит каждому из них:

class Perms {
    const read           = 1;
    const write          = 2;
    const append         = 4;
    const delete         = 8;
    const deleteContents = 16;
    const readPerm       = 32;
    const changePerm     = 64;
    /* shortcuts */
    const fullControl    = 127; 
    const noControl      = 0;
}

Затем для каждого типа объекта у вас есть таблица, в которую вы вставляете пары (пользователь, perms) , (group, perms) , (роль, perms) или все, что вы хотите связать с разрешениями.

Вы можете запросить разрешения пользователя (у которого может быть несколько ролей) следующим образом:

//this will depend on the database
//you could also use whatever bitwise OR aggregate your database has
//to avoid the foreach loop below
$query = new Query(
    "select perm from objects_permissions as P ".
    "where P.id_object = \$1 and " .
    "   (P.role = any(\$2));",
    $obj->getId(), $user->getRoles()
);

$perms = 0;
foreach ($query as $row) {
    $perms |= $row['perm']; 
}

Вы также можете добавить запретить разрешения с небольшими трудностями.

4
ответ дан 1 December 2019 в 00:18
поделиться

Если вы хотите пройти по маршруту трех таблиц, вы можете создать свои таблицы следующим образом:

Table       | Rows
User        | id ; name ; dob ; permission_id ; etc...  
Roles       | id ; add_post ; edit_post ; delete_post ; add_user ; etc...
Permissions | id ; user_id ; role_id 
0
ответ дан 1 December 2019 в 00:18
поделиться
Другие вопросы по тегам:

Похожие вопросы: