假如系统有以资源,就说新闻吧,管理员可以添加,删除,修改新闻,无论是谁发布的都可以操作,因为管理员是有任意权限的用户,而用户A只能发布,只能删除自己发布的,只能修改自己发布,但可以查看全部的新闻。我们一般就是在系统中判断当前用户是不是管理员,如果是就可以操作,如果不是,再判断是不是创建者,如果是就可以操作,否则就不能操作。上面这种做法写的太死了,因为后面又可能加一个角色,这个角色的用户可以对新闻进行编辑,那又怎么办呢请问这种权限如果不是写死在程序的话,怎么通过配置进行权限管理呢。

解决方案 »

  1.   

    二进制权限
    [Flag]
    enum Right
    {
    None = 0;
     AddNew,
    Edit,
    Delete
    ....
    ...
    }可以通过二进制的运算符来计算当前用户所拥有的权限
      

  2.   

    所以ASP.NET 已经有Membership/Role了。如果你连现成的东西都不愿意学习,就考虑自己怎么创造一个,那更困难了。
      

  3.   

    如楼上honkerhero所说,把权限细化,使权限粒度更细。模块          操作
    新闻模块    添加 修改 删除 查看 审核...做法可采用honkerhero的二进制权限划分法权限串  11111111
    每一位代表一个操作权限,1表示有权限,0表示无权限“请问这种权限如果不是写死在程序的话,怎么通过配置进行权限管理呢”
    不要写死,把权限相关的数据都保存到数据库其它地方
      

  4.   

    大家应该还没有明白我的意思,不是谁有权限,可以给谁授权限的问题
    这个是一个规则的问题,比如新闻的创建者,本身是没有修改、删除的权限的,但是这个新闻是他创建的
    那么他就有了这个权限了,而且这个权限只针对他创建的那条新闻才有的,其他是没有的楼上各位说的是粗的权限,就是谁有xx权限的问题,而我说的是谁在XX情况下有XX权限的问题语言表达不佳,希望大家能明白
      

  5.   

    新闻,用创建者id吧
    登录人一头id吧
    判断相等啊
    登录人有权限属性吧,如果不是adm就上面的
    ————
    写成一个类,所有要用到的都继承这个类是这个意思吧
      

  6.   

    用户 -> group  ->给group 分配权限添加角色的时候 添加一个组就行了 然后把用户分配到组里面。也可以更改组的权限。简单的权限
      

  7.   

    为什么要写死在程序中呢?
    模块
      新闻模块
         新闻信息表(id, 新闻内容,标题,。创建者,创建时间)
         权限表(增删改等等);
         人员具体权限(账号,权限信息,id,加一个字段判别是否可以删除自己的文章(0,1))
         账号对应的是创建者,权限信息对应的是权限表,id对应的是新闻编号。
         在发布新闻的时候,就可以写入到人员具体权限中。
         先判断是不是他的新闻,在判断是否能修改,删除。