Php 用户组及其管理站点的权限
根据用户组向用户授予某些操作/权限的最佳方式是什么?假设有3个组-用户、管理员和会计。用户可以执行操作1、管理操作1、2、3、会计操作1和2。可能是这样的:Php 用户组及其管理站点的权限,php,usergroups,Php,Usergroups,根据用户组向用户授予某些操作/权限的最佳方式是什么?假设有3个组-用户、管理员和会计。用户可以执行操作1、管理操作1、2、3、会计操作1和2。可能是这样的: if(group == user){ action1(); //function } if(group == admin){ action1(); action2(); action3(); } if(group == accountant){ action1(); action2(); } if ( has_permission('ac
if(group == user){ action1(); //function }
if(group == admin){ action1(); action2(); action3(); }
if(group == accountant){ action1(); action2(); }
if ( has_permission('action_one') ) {
action_one();
}
$permissions['admin'] = array('create_all', 'delete_all', 'update_all', 'ban_users', 'etc.');
$permissions['moderator'] = array('update', 'delete');
$permissions['user'] = array('view_members_area', 'create_post', 'update_own', 'etc');
所有操作都将存储在functions.php文件中,然后包含在页面中。这是一个好主意还是有更好的解决方案?一个用户可以加入多个组吗?如果没有,请在数据库中创建一个表:
Group
group_id INT (for sorting)
group_name VARCHAR
user_id INT
否则,创建表组|组| id、组|名称和表组|用户|隶属关系|组| id、用户| id
显然,要根据您的命名方案调整这些
如果您已经有了一个用户类的OOP方法,那么添加一个field.group。
否则,创建诸如字符串get\u groupINT$user\u id之类的函数,然后查询数据库。一个用户可以是多个组的一部分吗?如果没有,请在数据库中创建一个表:
Group
group_id INT (for sorting)
group_name VARCHAR
user_id INT
否则,创建表组|组| id、组|名称和表组|用户|隶属关系|组| id、用户| id
显然,要根据您的命名方案调整这些
如果您已经有了一个用户类的OOP方法,那么添加一个field.group。
否则,创建诸如字符串get\u groupINT$user\u id之类的函数,然后使用诸如
if (admin) {do x}
else if (user) {do y}
这是一个坏主意,因为它缺乏灵活性,并且不能很好地扩展
有几个选择。如果您的权限是分层的,这意味着一个用户可以做任何事情,而较低级别的用户拥有的权限少于上面的用户,例如:
admin - 1, 2, 3
accountant - 1, 2
user - 1
然后你可以给他们数字,然后说
if (permissionValue => 500)
{
action2();
}
还有一张桌子:
admin 1000
accountant 500
user 250
这允许您在管理员和会计之间添加一个新的用户类型,如版主,但如果您有:
admin 1, 2, 3
accountant 1, 2
moderator 1, 3
user 1
因为版主和会计的权限在同一级别
到目前为止,最好的解决方案是使用位运算符并将二进制值分配给受保护的区域
举一个简单的例子,用户可以阅读内容,版主可以读写内容,管理员可以读写删除内容。下表中的值是使用按位or运算符构造的
Users: Read Write Delete
admin: 7 - (0b001 | 0b010 | 0b100) = 0b111 = 7
moderator: 3 - (0b001 | 0b010 | NO ) = 0b011 = 3
user: 1 - (0b001 | NO | NO ) = 0b001 = 1
然后,您可以执行以下操作:
//Permissions:
define('READ', 1);
define('WRITE', 2);
define('DELETE', 4);
if ($userPermissions & READ)
{
//Allowed to Read
}
if ($userPermissions & WRITE)
{
//Show write form
}
这些是按位运算符的示例。这意味着如果x包含位y,则返回true。对于write函数
User Permission
User Write
1 & 2
0b001 & 0b010 -- returns false
Admin Write
7 & 2
0b111 & 0b010 -- returns true
在第一个示例中,0b001不包含位0b010,因此返回false。0b111不包含位0b010并返回true
使用比较器阅读更多信息,如
if (admin) {do x}
else if (user) {do y}
这是一个坏主意,因为它缺乏灵活性,并且不能很好地扩展
有几个选择。如果您的权限是分层的,这意味着一个用户可以做任何事情,而较低级别的用户拥有的权限少于上面的用户,例如:
admin - 1, 2, 3
accountant - 1, 2
user - 1
然后你可以给他们数字,然后说
if (permissionValue => 500)
{
action2();
}
还有一张桌子:
admin 1000
accountant 500
user 250
这允许您在管理员和会计之间添加一个新的用户类型,如版主,但如果您有:
admin 1, 2, 3
accountant 1, 2
moderator 1, 3
user 1
因为版主和会计的权限在同一级别
到目前为止,最好的解决方案是使用位运算符并将二进制值分配给受保护的区域
举一个简单的例子,用户可以阅读内容,版主可以读写内容,管理员可以读写删除内容。下表中的值是使用按位or运算符构造的
Users: Read Write Delete
admin: 7 - (0b001 | 0b010 | 0b100) = 0b111 = 7
moderator: 3 - (0b001 | 0b010 | NO ) = 0b011 = 3
user: 1 - (0b001 | NO | NO ) = 0b001 = 1
然后,您可以执行以下操作:
//Permissions:
define('READ', 1);
define('WRITE', 2);
define('DELETE', 4);
if ($userPermissions & READ)
{
//Allowed to Read
}
if ($userPermissions & WRITE)
{
//Show write form
}
这些是按位运算符的示例。这意味着如果x包含位y,则返回true。对于write函数
User Permission
User Write
1 & 2
0b001 & 0b010 -- returns false
Admin Write
7 & 2
0b111 & 0b010 -- returns true
在第一个示例中,0b001不包含位0b010,因此返回false。0b111不包含位0b010并返回true
阅读更多我会在数据库中创建另外两个表,比如权限,只包含两个字段——id和名称,可能还有一个标题供人阅读。 第二个是组权限。然后只需添加一些权限,例如:“操作一”、“操作二”和“另一个操作” 然后在php中检查如下权限:
if(group == user){ action1(); //function }
if(group == admin){ action1(); action2(); action3(); }
if(group == accountant){ action1(); action2(); }
if ( has_permission('action_one') ) {
action_one();
}
$permissions['admin'] = array('create_all', 'delete_all', 'update_all', 'ban_users', 'etc.');
$permissions['moderator'] = array('update', 'delete');
$permissions['user'] = array('view_members_area', 'create_post', 'update_own', 'etc');
对于一个只有3个组的任务来说,这种方法可能会有一点开销,但是如果以后添加更多的组,它将被证明是有用的
或者,我知道一种硬编码方法,您可以在其中创建配置文件并列出如下权限:
if(group == user){ action1(); //function }
if(group == admin){ action1(); action2(); action3(); }
if(group == accountant){ action1(); action2(); }
if ( has_permission('action_one') ) {
action_one();
}
$permissions['admin'] = array('create_all', 'delete_all', 'update_all', 'ban_users', 'etc.');
$permissions['moderator'] = array('update', 'delete');
$permissions['user'] = array('view_members_area', 'create_post', 'update_own', 'etc');
和上面的方法一样,在调用一个操作之前,通过函数检查权限,我会在数据库中创建另外两个表,比如权限,只有两个字段——id和名称,可能还有一个标题供人阅读。 第二个是组权限。然后只需添加一些权限,例如:“操作一”、“操作二”和“另一个操作” 然后在php中检查如下权限:
if(group == user){ action1(); //function }
if(group == admin){ action1(); action2(); action3(); }
if(group == accountant){ action1(); action2(); }
if ( has_permission('action_one') ) {
action_one();
}
$permissions['admin'] = array('create_all', 'delete_all', 'update_all', 'ban_users', 'etc.');
$permissions['moderator'] = array('update', 'delete');
$permissions['user'] = array('view_members_area', 'create_post', 'update_own', 'etc');
对于一个只有3个组的任务来说,这种方法可能会有一点开销,但是如果以后添加更多的组,它将被证明是有用的
或者,我知道一种硬编码方法,您可以在其中创建配置文件并列出如下权限:
if(group == user){ action1(); //function }
if(group == admin){ action1(); action2(); action3(); }
if(group == accountant){ action1(); action2(); }
if ( has_permission('action_one') ) {
action_one();
}
$permissions['admin'] = array('create_all', 'delete_all', 'update_all', 'ban_users', 'etc.');
$permissions['moderator'] = array('update', 'delete');
$permissions['user'] = array('view_members_area', 'create_post', 'update_own', 'etc');
和方法abov一样
e在调用操作之前通过函数检查权限遗憾的是,您没有将Perl与Catalyst结合使用,因为基于角色的授权看起来很棒。不过,它可能会给您一些启示:遗憾的是,您没有将Perl与Catalyst结合使用,因为基于角色的授权看起来很棒。不过,它可能会给你一些灵感: