/********************************************************************************************* * Copyright 2004 - Volian Enterprises, Inc. All rights reserved. * Volian Enterprises - Proprietary Information - DO NOT COPY OR DISTRIBUTE * ------------------------------------------------------------------------------ * $Workfile: Security.cs $ $Revision: 4 $ * $Author: Jsj $ $Date: 5/17/05 11:52a $ * * $History: Security.cs $ * * ***************** Version 4 ***************** * User: Jsj Date: 5/17/05 Time: 11:52a * Updated in $/LibSource/Utils * cleanup * * ***************** Version 3 ***************** * User: Kathy Date: 1/24/05 Time: 2:44p * Updated in $/LibSource/Utils * B2005-004 fixes * * ***************** Version 2 ***************** * User: Kathy Date: 1/14/05 Time: 10:38a * Updated in $/LibSource/Utils * B2004-061: fix security options * * ***************** Version 1 ***************** * User: Kathy Date: 7/27/04 Time: 8:34a * Created in $/LibSource/Utils *********************************************************************************************/ using System; using System.IO; using System.Collections; using System.Windows.Forms; using System.Text; namespace Utils { /// /// Summary description for Security. /// public class Security { public const long VIEW =0x00000001L; public const long PRINT =0x00000002L; public const long PRINTDRAFT =0x00000004L; public const long PRINTCHANGES =0x00000008L; public const long EDIT =0x00000010L; public const long SEARCH =0x00000020L; public const long STANDARDSTEPS =0x00000040L; public const long APPROVE =0x00000080L; public const long APPROVESINGLE =0x00000100L; public const long LIBRARYDOCS =0x00000200L; public const long ADDMODDEL =0x00000400L; public const long CLEAN =0x00000800L; public const long LOCKPROC =0x00001000L; public const long LOCKSET =0x00000001L; public const long UCF =0x00000002L; public const long LOCKSYSTEM =0x00000001L; public const long DOCMAINT =0x00000002L; public const long ROEDITOR =0x00000004L; public const long SYSADMIN =0x00000008L; public const int SUPERUSER =1000; public const long SUPERACCESS =0xFFFFFFFFL; // the following four flags are system security options, // read in for the user from the security file (vesam.opt) private bool BlockAccessFlag=false; public bool PermissionToManageFlag=false; public bool SystemAdminFlag=false; public bool PermissionToLockFlag=false; // private string optFileName; private int numsets = 0; private long uoptions; // user options private Int16 blockAccess = 0; private long oldpos; public int userid = -1; // private int plantid = -1; // private int procid = -1; private string ident; public string initials; private const string samoptname = "vesam.opt"; public string optfilename; private ArrayList psets; // public FileStream fs; public BinaryReader bw; public bool isDemoMode=false; public Security(string pathname) { if (File.Exists(pathname + "\\" + samoptname) == false) { MessageBox.Show("Could not locate the Security Options file:\n\n" + pathname+"\\"+samoptname,"Security Access Error"); optfilename = null; return; } optfilename = pathname + "\\" + samoptname; psets = new ArrayList(); } public bool OpenFile() { try { fs = new FileStream(optfilename,FileMode.Open,FileAccess.Read,FileShare.Read,1,false); bw = new BinaryReader(fs); return true; } catch (Exception e) { MessageBox.Show(e.Message,"Security File"); return false; } } public void CloseFile() { bw.Close(); fs.Close(); bw=null; fs=null; } public int CheckUserId(string Name, string Pass) { // check for default superuser username/password. if ((Name=="vlnmsp") && (Pass=="575")) { userid = SUPERUSER; ident = "vlnmsp"; initials = Name; return userid; } if (bw==null) { bool op; if ((op = OpenFile()) == false) return -1; } byte x; // read past some header stuff. for (int jj=0;jj<16;jj++) x=bw.ReadByte(); long nxtUs; uint nmUser; nxtUs=bw.ReadUInt32(); nmUser=bw.ReadUInt16(); int uid, tmp; string fName, fPass; for (int i = 0; i < nmUser; i++) { fs.Seek((long)nxtUs,SeekOrigin.Begin); nxtUs=bw.ReadUInt32(); uid = bw.ReadUInt16(); tmp = bw.ReadUInt16(); byte [] test = new byte[10]; test = bw.ReadBytes(10); fName = Encoding.ASCII.GetString(test,0,10); int indx = fName.IndexOf("\0"); string fNameTrim = fName.Substring(0,indx); if (fNameTrim == Name) { test = bw.ReadBytes(10); fPass = Encoding.ASCII.GetString(test,0,10); indx = fPass.IndexOf("\0"); string fPassTrim = fPass.Substring(0,indx); if (fPassTrim == Pass) { userid = uid; ident = Name; initials = Name; break; } } } CloseFile(); return userid; } public void SetUserSystemRights() { BlockAccessFlag=BlockAccess(); long userAccessFlags=GetUserSecurity(); PermissionToManageFlag=(userAccessFlags&Security.DOCMAINT)==0?false:true; PermissionToLockFlag=(userAccessFlags&Security.LOCKSYSTEM)==0?false:true; SystemAdminFlag=(userAccessFlags&Security.SYSADMIN)==0?false:true; } public void LoadUserSecurity() { // // get the system level security options for this user here // bool op = OpenFile(); if (op==false) return; if( userid == 1000 ) { // super user priviledge uoptions = 0xFFFFFFFFL; SetUserSystemRights(); CloseFile(); return; } fs.Seek(32,SeekOrigin.Begin); blockAccess=bw.ReadInt16(); fs.Seek(0,SeekOrigin.Begin); byte x; // read past some header stuff. for (int jj=0;jj<16;jj++) x=bw.ReadByte(); long nxtUs; uint nmUser; nxtUs=bw.ReadUInt32(); nmUser=bw.ReadUInt16(); int uid; for (int i = 0; i < nmUser; i++) { oldpos = nxtUs; fs.Seek((long)nxtUs,SeekOrigin.Begin); nxtUs=bw.ReadUInt32(); uid = bw.ReadUInt16(); if (uid == userid) { string junk = new string (bw.ReadChars(22)); uoptions=bw.ReadUInt16(); break; } } SetUserSystemRights(); CloseFile(); } public void SetUpDemoMode() { userid=Security.SUPERUSER; // super user so that demo data can be anywhere (doesn't check vesamp.opt) ident="demo"; initials="demo"; isDemoMode = true; } public int GetPlantSecurityIndex(string Location) { for (int i=0;ipsets.Count-1)return false; SecurityPlantSets sps = (SecurityPlantSets) psets[idx]; return sps.HasSecurity; } public bool ProcSetHasSecurity(int idx, string procset) { if (userid == SUPERUSER) return true; if (idx<0 || idx>psets.Count-1)return false; SecurityPlantSets sps = (SecurityPlantSets) psets[idx]; return sps.ProcSetHasSecurity(procset); } public long GetPlantSecurity(int idx) { if(userid == SUPERUSER ) return SUPERACCESS; if (idx<0 || idx>psets.Count-1) return 0L; SecurityPlantSets sps = (SecurityPlantSets) psets[idx]; return (sps.GetSecurity()); } public bool AnyOptionsSet(int idx) { if(userid==SUPERUSER) return true; if (idx<0 || idx>psets.Count-1) return false; SecurityPlantSets sps = (SecurityPlantSets) psets[idx]; return sps.AnyOptionsSet(); } public long GetUserSecurity() { if(userid == SUPERUSER) return SUPERACCESS; return(uoptions); } public bool BlockAccess() { if (userid == SUPERUSER) return false; if(blockAccess!=0) return true; return false; } public bool IsAllowed(long mask) { if(userid == SUPERUSER) return true; return (uoptions&mask) != 0; } public bool IsAllowed(string plantpath, string procpath, long mask) { bool retval = false; if(userid == SUPERUSER) return true; for(int i=0; i0) procs = new ArrayList(numopts); else procs = null; for(int i=0;i