merged cont.
[opensuse:yast-rest-service.git] / webyast / lib / yast_roles.rb
1 #--
2 # Webyast Webservice framework
3 #
4 # Copyright (C) 2009, 2010 Novell, Inc. 
5 #   This library is free software; you can redistribute it and/or modify
6 # it only under the terms of version 2.1 of the GNU Lesser General Public
7 # License as published by the Free Software Foundation. 
8 #
9 #   This library is distributed in the hope that it will be useful, but WITHOUT
10 # ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
11 # FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more 
12 # details. 
13 #
14 #   You should have received a copy of the GNU Lesser General Public
15 # License along with this library; if not, write to the Free Software 
16 # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
17 #++
18
19 module YastRoles
20
21   require 'polkit'
22   require 'exceptions'
23
24   public
25
26   # Shortcut for yapi permission so it is enought to write
27   #    yapi_perm_check "time.read"
28   # instead
29   #    permission_check "org.opensuse.yast.modules.yapi.time.read"
30   # for more details see permission_check
31   def yapi_perm_check(action)
32     permission_check "org.opensuse.yast.modules.yapi.#{action}"
33   end
34
35   # Check if permission user can do selected action.
36   # <b>action</b>:: name of target action
37   # <b>throws</b> :: throwed exceptions:
38   #                  - _NotLoggedException_ if no user is logged
39   #                  - _NoPermissionException_ if permission is not granted
40   #                  - _PolicyKitException_ for error during running policy kit
41   #
42   def permission_check(action)
43     action = action.to_s #avoid problems if action is symbol
44     account = self.current_account
45     raise NotLoggedException if account.nil? || account.login.size == 0
46     action ||= "" #avoid nil action
47
48     begin
49       if PolKit.polkit_check( action, account.login) == :yes
50         Rails.logger.debug "Action: #{action} User: #{account.login} Result: ok"
51         return true
52       end
53       Rails.logger.debug "Action: #{action} User: #{account.login} Result: NOT granted"
54       raise NoPermissionException.new(action, account.login)
55     rescue RuntimeError => e
56       puts "permission_check1: #{e}, #{account.inspect}:#{action}"
57       Rails.logger.info e
58       raise PolicyKitException.new(e.message, account.login, action)
59     rescue Exception => e
60       puts "permission_check2: #{e}"
61       Rails.logger.info e
62       raise
63     end
64   end
65 end