我正在开发一个需要访问权限计划的网站。我不确定我是如何构建这个方案的,我很难找到很好的资源来确定不仅仅是如何实现权限方案,而是如何规划方案应该能够做什么。
我有很多问题而不是很多可靠的信息。我无法阐述可用答案的利弊。
您在设计权限计划方面有什么经验?我在这里非常环保,任何好的资源,书籍,博客等都会非常有用。
答案 0 :(得分:1)
这些想法可能对您有益,也可能没有任何好处,但我从头开始构建基于Web的权限驱动系统(我需要低级控制以与其他系统集成),如下所示:
每个权限区域都有自己的位掩码,这些位掩码存储在数据库中,允许您在构建过程中自动生成权限实用程序类。实用程序类看起来像这样:
public static class Area1
{
public static int AreaId { get { return 1; } }
public static int Permission1 { get { return 1; } }
public static int Permission2 { get { return 2; } }
public static int Permission3 { get { return 4; } }
}
public static class Area2
{
public static int AreaId { get { return 2; } }
public static int Permission1 { get { return 1; } }
public static int Permission2 { get { return 2; } }
public static int Permission3 { get { return 4; } }
public static int Permission4 { get { return 8; } }
public static int Permission5 { get { return 16; } }
}
等...
然后您可以定义权限基页:
public class PermissionsPage: BasePage
{
int _permissionAreaId;
int _permissionValue;
string _page;
public PermissionsPage(int permissionAreaId, int permissionValue)
: base()
{
Init += new EventHandler(PermissionsPage_Init);
_permissionTypeId = permissionTypeId;
_permissionValue = permissionValue;
}
void PermissionsPage_Init(object sender, EventArgs e)
{
if (!IsPostBack)
{
_page = Request.Url.Segments.Last();
if (!PermissionsManager.TestPermission(UserWebSession.User, _permissionTypeId, _permissionValue))
{
// handle permission denied
}
else
{
// log page access
}
}
}
}
然后,实用程序文件允许您在开发期间执行此类操作:
public partial class yourControlledPage : PermissionsPage
{
// test permission over an entire page
public yourControlledPage()
: base(PermissionDef.Area1.AreaId, PermissionDef.Area1.Permission1)
{
}
}
和
// test permission over a specific control
yourDropDownList.Enabled = PermissionsManager.TestPermission(UserWebSession.User, PermissionDef.Area2.AreaId, PermissionDef.Area2.Permission4);
*例如,'Area1'和'Permission1'被替换为有意义的名称..显然!
然后,很可能会有第三方图书馆,你可以很好地插入,并做你需要的所有......
答案 1 :(得分:0)
我对KnowledgeTree的权限系统的灵活性和强大能力印象深刻。
大致如下组织:业务单位 - >组(和子组) - >角色 - >用户
KT是一个文档管理系统,但所有权限都在目录级别分配,而不是在资产本身分配。每个资产和子目录都从其父目录继承权限。
这允许您在组的基础上设置相当广泛的权限,并通过为角色设置更明确的权限来缩小范围。然后根据需要为用户分配角色;用户A可能被分配给目录X的编辑者角色但不分配给Y.这些权限将分配给用户A已经在的任何组。
我的一个抱怨是,没有真正的方法可以直接为用户定义特定权限。如果我希望用户B具有对所有目录的特定访问权限,我必须将它们添加到组中或将它们分配给角色(反过来必须创建或分配给目录)。
TYPOlight webCMS有点纠正了这个问题,虽然它不是那么强大。 CMS中的每个用户都可以使用其组权限(仅限),使用单独的权限扩展其组权限,或使用单独的权限(仅限)。