由于最近需要对redmine系统进行插件的开发,难于需要用到权限管理,也总结了一些设置的心得,与大家分享。如果有不正确的,欢迎指出与交流。
(1)init.rb中project_menu:
只有用户在该项目中扮演的角色对于该:controller:action具有权限时才会在项目菜单中显示(包括题目下方的菜单和配置中的tab菜单等)
其中,permission函数的options参数可以设置这些值:
①:public=>true,表示不设权限设置
②:require=>:loggedin和:require=>:member,分别阻止Anonymous和Non member(对应权限报表中的Anonymous和Non member,若写上:require=>:member,则在权限报表中的Anonymous和Non member将不能勾选)
PS:这里的init.rb指的是插件中根目录中的init.rb,若要改变父工程的权限设置,可以到父工程根目录/lib/redmine.rb中设置
(2)init.rb中account_menu:
可以利用Proc.new {}里执行逻辑判断语句
Example: :if => Proc.new { |p| User.current.logged? }
PS:p是本应用程序,例如可以使用p.project访问controller中获取的@project
(3)controller中:
①若当前controller只针对一个project:可以在before_filter处设置,步骤为::find_project,:authorize
PS:authorize函数中调用了User.current.allowed_to?函数
②若当前controller针对多个project:需要自行写一个函数,在函数中显示地调用User.current.allowed_to?(:permission, @project)进行判断
PS:User.current.allowed_to?函数中调用了Role.allowed_to?函数
(4)html.erb中:
①针对#(用户、项目、权限)三元组,可以这样使用:User.current.allowed_to?(:permission, @project)
②针对#(角色、权限)二元组,可以这样使用:role.allowed_to?(:permission)